﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 战地2服务器控制中心
{
    public partial class 地图设置 : Form
    {
        bool tab = false;//用于标记头
        bool tabyc = false;
        string mode = null;
        public 地图设置()
        {
            InitializeComponent();
            //获取当前服务器中的总地图
            mode = SupportMode.Mode;
            try
            {
                string[] _ZMaps = Directory.GetDirectories(@"mods\" + mode + @"\Levels");//获取目录下的所有子目录的名称（包含路径）
                string ZMap;
                string zmap;
                for (int i = 0; i < _ZMaps.Length; i++)
                {
                    ZMap = _ZMaps[i];//把数组转换成字符串方便截断
                    zmap = ZMap.Substring(16);//截断字符
                    MapsList.Items.Add(zmap);//输入最终结果
                }
                //读取配置文件中的地图名
                string[] lines = File.ReadAllLines(@"mods\" + mode + @"\settings\maplist.con");//读取服务器设置（然后通过下标来指定一行）
                for (int i = 0; i < lines.Length; i++)
                {
                    string _Map = lines[i];//下标第一行
                    string Map = _Map.Substring(15);//截断之前的字符串
                    MapsDQList.Items.Add(Map);//输入当前的设置的地图
                }
            }
            catch
            {
                MessageBox.Show("你的文件有损坏，请下载正规的战地2，或安装正规的模组");
                Process.GetCurrentProcess().Kill();
            }
        }
        private void MapsModeBox_SelectedIndexChanged(object sender, EventArgs e)//操作人数
        {
            MapsList.Enabled = true;
            int a = MapsList.Items.Count;
            int i = 0;
            if (MapsModeBox.Text == "16人")
            {
                重载();
                for (i = 0; i < a; i++)//循环并替换之前的
                {
                    MapsList.Items.Add(MapsList.Items[i] + " gpm_cq 16");
                }
                for (i = 0; i < a; i++)
                {
                    MapsList.Items.RemoveAt(0);
                }
            }
            else if (MapsModeBox.Text == "32人")
            {
                重载();
                for (i = 0; i < a; i++)//循环并替换之前的
                {
                    MapsList.Items.Add(MapsList.Items[i] + " gpm_cq 32");
                }
                for (i = 0; i < a; i++)
                {
                    MapsList.Items.RemoveAt(0);
                }
            }
            else//64
            {
                重载();
                for (i = 0; i < a; i++)//循环并替换之前的
                {
                    MapsList.Items.Add(MapsList.Items[i] + " gpm_cq 64");
                }
                for (i = 0; i < a; i++)
                {
                    MapsList.Items.RemoveAt(0);
                }
            }

        }

        private void MapConcel_Click(object sender, EventArgs e)//取消
        {
            Close();
        }

        private void MapSave_Click(object sender, EventArgs e)//确认按钮
        {
            while (MapsDQList.Items.Contains(""))//判断是否有空值
            {
                MapsDQList.Items.Remove("");//移除空值
                MessageBox.Show("当前设置地图里不能有空的值，已经自动帮你删除空值了");
            }
            int a = MapsDQList.Items.Count;//地图数变量
            StreamWriter sw = new StreamWriter(@"mods\" + mode + @"\Settings\maplist.con");//写入地图设置文件
            for (int i = 0; i < a; i++)//所有地图写入完毕
            {
                sw.WriteLine("mapList.append " + MapsDQList.Items[i]);
            }
            sw.Close();//关闭流，才能写入文本
            MessageBox.Show("保存成功");
            this.Close();
        }
        public void 重载()//判断地图是否有模式，如果有没有模式则跳过，有模式这取消掉模式
        {
            int a = MapsList.Items.Count;
            int i = 0;
            try
            {
                for (i = 0; i < a; i++)
                {
                    string Mapstr = MapsList.Items[i].ToString();
                    int index = Mapstr.IndexOf("gpm_cq");
                    string NewMaps = Mapstr.Substring(0, index - 1);
                    MapsList.Items.Add(NewMaps);
                }
                for (i = 0; i < a; i++)
                {
                    MapsList.Items.RemoveAt(0);
                }
            }
            catch
            {

            }
        }

        private void MapsTJ_Click(object sender, EventArgs e)//添加地图按钮
        {
            if (tab == false)
            {
                MessageBox.Show("请选择一副你要添加的地图");
            }
            else
            {
                MapsDQList.Items.Add(MapsList.Text);
            }
        }

        private void MapsList_Click(object sender, EventArgs e)
        {
            tab = true;//改变添加地图标记头
        }

        private void MapsList_DoubleClick(object sender, EventArgs e)//实现双击添加效果
        {
            if (tab == false)
            {
                MessageBox.Show("请选择一副你要添加的地图");
            }
            else
            {
                MapsDQList.Items.Add(MapsList.Text);
            }
        }

        private void MapsYC_Click(object sender, EventArgs e)//移除地图
        {
            if (tabyc == false)
            {
                MessageBox.Show("请选择一副你要移除的地图");
            }
            else
            {
                MapsDQList.Items.Remove(MapsDQList.Text);
            }
        }

        private void MapsDQList_Click(object sender, EventArgs e)
        {
            tabyc = true;//改变移除地图标记头
        }

        private void MapsDQList_DoubleClick(object sender, EventArgs e)//双击实现移除地图
        {
            if (tabyc == false)
            {
                MessageBox.Show("请选择一副你要移除的地图");
            }
            else
            {
                MapsDQList.Items.Remove(MapsDQList.Text);
            }
        }
    }
}
